2 #ifndef FRAMELIB_MEMORY_H 3 #define FRAMELIB_MEMORY_H 5 #include "../FrameLib_Dependencies/tlsf/tlsf.h" 56 Pool(
void *mem,
size_t size) : mUsedRecently(
true), mTime(0), mSize(size), mPrev(
nullptr), mNext(
nullptr), mMem(mem) {}
58 bool isFree() {
return tlsf_pool_is_free(mMem); }
85 void doTask()
override { mAllocator->addScheduledPool(); };
87 CoreAllocator *mAllocator;
107 void doTask()
override { mAllocator->destroyScheduledPool(); };
109 CoreAllocator *mAllocator;
119 void *
alloc(
size_t size);
128 Pool *getPool(pool_t pool);
132 static Pool *createPool(
size_t size);
133 static void destroyPool(Pool *pool);
134 void linkPool(Pool *pool);
135 void unlinkPool(Pool *pool);
136 void poolToTop(Pool *pool);
137 void insertPool(Pool *pool);
138 void removePool(Pool *pool);
142 void addScheduledPool();
143 void destroyScheduledPool();
153 size_t mLastDisposedPoolSize;
154 std::atomic<Pool *> mScheduledNewPool;
155 std::atomic<Pool *> mScheduledDisposePool;
156 NewThread mAllocThread;
157 FreeThread mFreeThread;
179 mAllocator->mLock.acquire();
184 mAllocator->mAllocator.prune();
185 mAllocator->mLock.release();
193 void dealloc(
void *ptr) { mAllocator->mAllocator.dealloc(ptr); }
216 void *
alloc(
size_t size);
229 CoreAllocator mAllocator;
247 static const int numLocalFreeBlocks = 16;
259 FreeBlock() : mMemory(
nullptr), mSize(0), mPrev(
nullptr), mNext(
nullptr) {}
312 double *
getVector()
const {
return mStorage->getVector(); }
319 void resize(
bool tagged,
size_t size) { mStorage->resize(tagged, size); }
328 const char *
getName()
const {
return mName.c_str(); }
342 void resize(
bool tagged,
size_t size);
368 unsigned long mCount;
387 void *
alloc(
size_t size);
401 Storage *registerStorage(
const char *name);
402 void releaseStorage(
const char *name);
408 std::vector<Storage *>::iterator findStorage(
const char *name);
412 void *removeBlock(FreeBlock *block);
418 FreeBlock mFreeLists[numLocalFreeBlocks];
421 std::vector<Storage *> mStorage;
Pruner(FrameLib_GlobalAllocator *allocator)
Definition: FrameLib_Memory.h:177
~FrameLib_GlobalAllocator()
Definition: FrameLib_Memory.h:207
void resize(bool tagged, size_t size)
Definition: FrameLib_Memory.h:319
double * getVector() const
Definition: FrameLib_Memory.h:335
FrameLib_GlobalAllocator(FrameLib_ErrorReporter &errorReporter)
Definition: FrameLib_Memory.h:206
Definition: FrameLib_Types.h:54
static size_t getAlignment()
Definition: FrameLib_Memory.cpp:262
Serial * getTagged() const
Definition: FrameLib_Memory.h:338
a spinlock that can be locked, attempted or acquired.
Definition: FrameLib_Threading.h:84
a set of tagged parameter values using external non-owned memory.
Definition: FrameLib_Parameters.h:51
void dealloc(void *ptr)
Definition: FrameLib_Memory.cpp:254
const char * getName() const
Definition: FrameLib_Memory.h:328
a thread that can be triggered from another thread (there is no mechanism to check progress) ...
Definition: FrameLib_Threading.h:244
void increment()
Definition: FrameLib_Memory.h:356
a class used to report errors to the host environment.
Definition: FrameLib_Errors.h:34
Access(Storage *storage)
Definition: FrameLib_Memory.h:301
FrameLib_GlobalAllocator & operator=(const FrameLib_GlobalAllocator &)=delete
static size_t getAlignment()
Definition: FrameLib_Memory.h:396
Definition: FrameLib_Threading.h:161
void dealloc(void *ptr)
Definition: FrameLib_Memory.h:193
FrameType getType() const
Definition: FrameLib_Memory.h:311
unsigned long getVectorSize() const
Definition: FrameLib_Memory.h:336
~Access()
Definition: FrameLib_Memory.h:302
Definition: FrameLib_Types.h:54
~Pruner()
Definition: FrameLib_Memory.h:182
void * alloc(size_t size)
Definition: FrameLib_Memory.cpp:248
an RAII utility for safely accessing a Storage object.
Definition: FrameLib_Memory.h:294
a global threadsafe memory allocator suitable for realtime usage.
Definition: FrameLib_Memory.h:31
static size_t alignSize(size_t x)
Definition: FrameLib_Memory.h:397
a memory allocator suitable for usage in a given FrameLib context.
Definition: FrameLib_Memory.h:245
static size_t alignSize(size_t x)
Definition: FrameLib_Memory.cpp:267
unsigned long decrement()
Definition: FrameLib_Memory.h:357
FrameType
Definition: FrameLib_Types.h:54
named storage local to a specific context.
Definition: FrameLib_Memory.h:278
double * getVector() const
Definition: FrameLib_Memory.h:312
Serial * getTagged() const
Definition: FrameLib_Memory.h:315
Definition: FrameLib_Threading.h:161
an RAII utility for repeated deallocation with only a single lock.
Definition: FrameLib_Memory.h:172
a thread to delegate tasks to, which can be then be checked for completion
Definition: FrameLib_Threading.h:296
unsigned long getVectorSize() const
Definition: FrameLib_Memory.h:313
unsigned long getTaggedSize() const
Definition: FrameLib_Memory.h:314
FrameType getType() const
Definition: FrameLib_Memory.h:334
unsigned long getTaggedSize() const
Definition: FrameLib_Memory.h:337